#include<iostream>
#include<cstring>
#include<deque>

using namespace std;

void  printDeque(const deque<int> & d){
    for(deque<int>::const_iterator it = d.begin();it!=d.end();it++){
        cout<<*it<<endl;
    }
    //使用const_iterator就可以保证it不会被修改
}

void test01(){
    deque<int> d;
    for(int i = 0 ;i<10; i++){
        d.push_back(i);
    }

    deque<int> d2(d.begin(), d.end());
    d2.push_back(10000);
    d.swap(d2);   //直接是两个deque交换  
    printDeque(d);
}
void test02(){
    vector<int> v1;
    vector<int> v2(v1.begin(), v1.end());
    vector<int> v3(10,100);  //10个100

    //交换
    vector<int> v4;
    v4.swap(v2);

}

//巧用swap收缩容量
void test03(){
    vector<int> v;
    for(int i=0;i<10000;i++){
        v.push_back(i);
    }
    cout<<"v的容量 "<<v.capacity()<<endl;
    cout<<"v的大小 "<<v.size()<<endl;
    v.resize(3);  //不会改变容量，占用大量内存
    cout<<"v的容量 "<<v.capacity()<<endl;
    cout<<"v的大小 "<<v.size()<<endl;

   vector<int>(v).swap(v);  //可以改变容量   swap是交换了指针，匿名对象所指的内存，在这行结束后被释放   
    cout<<"v的容量 "<<v.capacity()<<endl;
    cout<<"v的大小 "<<v.size()<<endl;
}

void test04(){
    vector<int> v;
    int * p =NULL;
    int num =0 ;
    for(int i =0;i<10000;i++){
        v.push_back(i);
        if(p!=&v[0]){
            p=&v[0];  //v[0]维  数据vector 的首元素，&就是获取其地址，不同空间，地址不同  
            num++;  //统计v的容量变成10000，需要开辟几次空间
        }
    }

}

//存取
void test05(){
    vector<int> v;
    v.reserve(10);
    for(int i=0;i<10;i++){
        v.push_back(i);
    }
    v.at(1);
    v[1];
    v.front();
    v.back();

    //插入
    v.insert(v.begin(),100);
    v.insert(v.begin(),2,100);

    v.pop_back();
    v.erase(v.begin());
    v.erase(v.begin(), v.end());
    v.clear();

}

void test06(){
    //逆序遍历
    vector<int> v;
    v.reserve(10);
    for(int i=0;i<10;i++){
        v.push_back(i);
    }
    for(vector<int>::reverse_iterator it =v.rbegin(); it!=v.rend();it++){
        cout<<*it<<endl;
    }

    //vector 是支持随机访问的迭代器，支持跳跃式访问  
    vector<int>::iterator itBegin = v.begin();
    itBegin = itBegin + 3;  //重载了+

    //list就不支持这样访问，只能++。

}




int main(){
    test01();
    return 0;

}